Skip to content

Common Job spec reporting via Beholder - #23227

Merged
jmank88 merged 8 commits into
developfrom
RANE-4655-common-job-spec-metrics
Sep 8, 2026
Merged

Common Job spec reporting via Beholder#23227
jmank88 merged 8 commits into
developfrom
RANE-4655-common-job-spec-metrics

Conversation

@skudasov

@skudasov skudasov commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Emits every job the node runs as CLJobInfo telemetry on Beholder — job identity, JD
provenance, and the full job definition as TOML "what is this node
actually configured to run?" for any job type.

Depends on smartcontractkit/chainlink-protos#432 (merged); node-platform is bumped to
914a0fc on main.


Revised after review. The previous revision added a core/services/cljobinfo package and a
second service; this folds it into the existing nodestatusreporter/jobspec service, which
already did the same thing for one job type. One service, one listener, one poll loop, two
tracks:

Track Scope Gated by
CLJobInfo every job, any type, full TOML always on
JobSpecEvent OCR2 only [JobSpecReporter] Enabled (unchanged)

application.go is untouched — the service was already wired with csaPubKeyHex,
static.Version, hostname and feedsORM. A failure on one track never suppresses the
other.

Behaviour change worth flagging

CLJobInfo is not gated by [JobSpecReporter] Enabled, so any node with Beholder
configured starts emitting it without a per-node opt-in. Nodes with [Telemetry] Enabled
false (the default) still emit nothing, so this only produces traffic where telemetry is
already on. Heartbeat cadence is PollingInterval, default 1h.

Verification

Deployed to cl-df-eth-sepolia-preprod (stage) and queried
glue.node_platform.common_v1_cljobinfo: 974 rows, 5 nodes, 7 jobs over ~13h, all fields
mapped, spec_toml populated on every row. bootstrap jobs are included, which the
OCR2-only telemetry never covered.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No conflicts with other open PRs targeting develop

@github-actions

Copy link
Copy Markdown
Contributor

I see you updated files related to core. Please run make gocs in the root directory to add a changeset as well as in the text include at least one of the following tags:

  • #added For any new functionality added.
  • #breaking_change For any functionality that requires manual action for the node to boot.
  • #bugfix For bug fixes.
  • #changed For any change to the existing functionality.
  • #db_update For any feature that introduces updates to database schema.
  • #deprecation_notice For any upcoming deprecation functionality.
  • #internal For changesets that need to be excluded from the final changelog.
  • #nops For any feature that is NOP facing and needs to be in the official Release Notes for the release.
  • #removed For any functionality/config that is removed.
  • #updated For any functionality that is updated.
  • #wip For any change that is not ready yet and external communication about it should be held off till it is feature complete.

@cl-sonarqube-production

Copy link
Copy Markdown

@trunk-io

trunk-io Bot commented Jul 24, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

… reporter

Fold core/services/cljobinfo into the existing nodestatusreporter/jobspec
service instead of adding a parallel reporter. CLJobInfo is now emitted for
every job regardless of type, alongside the unchanged OCR2-only JobSpecEvent
track. application.go and the [JobSpecReporter] config are unchanged.

Requires: smartcontractkit/chainlink-protos#432
RANE-4655
Comment on lines +49 to +50
ProposedAt time.Time
ApprovedAt time.Time

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any risk/ambiguity with using time.Time as opposed to a unix ms int64, for example?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated to account for this risk, but used google.protobuf.Timestamp
chainlink-protos changes: smartcontractkit/chainlink-protos@6acc8ef
chainlink changes: a66cc6d

jmank88
jmank88 previously approved these changes Sep 4, 2026
@gheorghestrimtu gheorghestrimtu added the build-publish Build and Publish image to SDLC label Sep 7, 2026
@cl-sonarqube-production

Copy link
Copy Markdown

@gheorghestrimtu
gheorghestrimtu marked this pull request as ready for review September 8, 2026 10:35
@gheorghestrimtu
gheorghestrimtu requested review from a team as code owners September 8, 2026 10:35
@jmank88
jmank88 enabled auto-merge September 8, 2026 13:58
@jmank88
jmank88 added this pull request to the merge queue Sep 8, 2026
Merged via the queue into develop with commit cee89a9 Sep 8, 2026
246 checks passed
@jmank88
jmank88 deleted the RANE-4655-common-job-spec-metrics branch September 8, 2026 14:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build-publish Build and Publish image to SDLC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants